package com.briup.day10;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Objects;
import java.util.StringJoiner;

public class Test03 {
    public static void main(String[] args) throws CloneNotSupportedException {
        /*
         在Java中创建对象的方式有几种？
            1、使用new关键字+对应类的构造器，在代码编写时就需要确定要创建哪一个类的对象
            2、通过Object类中的clone()方法，创建出一个一模一样的对象
         */
        Student s = new Student("张三", 18);
        System.out.println(s);
        System.out.println(s.hashCode());
        // 方式2创建对象，使用Object类中的clone方法，要实现克隆的前提是类实现Cloneable接口以及重写clone方法
        Student clone = s.clone();
        System.out.println(clone);
        System.out.println(clone.hashCode());
    }
}

//@Data
// 创建类的全参构造器
@AllArgsConstructor
// 创建类的无参构造器
@NoArgsConstructor
// 当类实现了Cloneable接口后，该类对象才支持被克隆，同时才能调用Object类中的clone方法克隆对象
class Student implements Cloneable {
    private String name;
    private int age;

    @Override
    public String toString() {
        return new StringJoiner(", ", Student.class.getSimpleName() + "[", "]")
                .add("name='" + name + "'")
                .add("age='" + age + "'")
                .toString();
    }

    // 重写Object类中的clone()方法
    public Student clone() throws CloneNotSupportedException {
        return (Student) super.clone();
    }
}

interface Action {
    // 在接口中只能定义被 public static final修饰的常量
    public static final int A = 10;
}